package es.deusto.herotactics.ingameandroid.botones;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import es.deusto.herotactics.ingameandroid.PantallaAndroid;
import es.deusto.herotactics.utils.SurfaceTweaks;

/**
 * Objeto botón. Este botón en si no puede ser instanciado, de él heredarán el resto de botones
 * en los que seespecificará la acción que pueden hacer al ser pulsados
 * 
 * @author Ibai
 *
 */
public abstract class Boton {
	private String texto;
	private Bitmap imagen = null;
	private int x1;
	private int y1;
	private int x2;
	private int y2;
	private Boolean enabled;
	protected PantallaAndroid origen;
	
	/**
	 * Constructor de un boton que se mostrara en la pantalla
	 * @param origen: pantalla en la que se situa el boton
	 * @param texto: texto del boton
	 */
	public Boton(PantallaAndroid origen, String texto) {
		this.texto = texto;
		this.x1 = 0;
		this.y1 = 0;
		this.x2 = 0;
		this.y2 = 0;
		this.enabled = true;
		this.origen = origen;
	}
	
	/**
	 * Constructor del boton que se mostrara en pantalla
	 * @param origen: pantalla en la que se situa el boton
	 * @param texto: texto del boton
	 * @param imagen: imagen a mostrar para representar el boton
	 */
	public Boton(PantallaAndroid origen, String texto, Bitmap imagen) {
		this.texto = texto;
		this.imagen = imagen;
		this.x1 = 0;
		this.y1 = 0;
		this.x2 = 0;
		this.y2 = 0;
		this.enabled = true;
		this.origen = origen;
	}
	
	/**
	 * Metodo que fija las dimensiones del boton
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 */
	public void setDims(int x1, int y1, int x2, int y2) {
		this.x1 = x1;
		this.y1 = y1;
		this.x2 = x2;
		this.y2 = y2;
		if (imagen != null)
			imagen=SurfaceTweaks.resizeBitmap(imagen, x2-x1, y2-y1);
	}
	
	public int getX1() {
		return x1;
	}
	
	public int getY1() {
		return y1;
	}
	
	public int getX2() {
		return x2;
	}
	
	public int getY2() {
		return y2;
	}
	
	protected boolean isEnabled() {
		return enabled;
	}
	
	protected void setEnabled (boolean enabled) {
		this.enabled = enabled;
	}
	
//	public void setEnabledWrapper(Boolean enabled) {
//		this.enabled = enabled;
//	}
	
	public void draw (Canvas canvas, Paint paint) {
		if (imagen == null) {
			paint.setColor(Color.BLACK);
			canvas.drawRect(x1, y1, x2, y2, paint);
			paint.setColor(Color.GREEN);
			canvas.drawRect(x1+1, y1+1, x2-1, y2-1, paint);
			paint.setColor(Color.BLACK);
			canvas.drawText(texto, x1+3, (y1+y2)/2+5, paint);
		} else {
			canvas.drawBitmap(imagen, x1, y1, paint);
		}
		if (!enabled) {
			paint.setARGB(150, 0, 0, 0);
			canvas.drawRect(x1, y1, x2, y2, paint);
		}
	}
	
	/**
	 * Método que se ejecutará al pulsar el botón
	 * 
	 * @param origen El contexto en el que se ha pulsado el botón
	 */
	public abstract void touch();
}
